package com.yidu.hbatsams.action;

import com.yidu.hbatsams.domain.AtsBaseItem;
import com.yidu.hbatsams.domain.vo.ModuleVo;
import com.yidu.hbatsams.service.ModuleService;
import com.yidu.hbatsams.utils.AtsBaseItemTree;
import com.yidu.hbatsams.utils.Node;
import com.yidu.hbatsams.utils.State;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.*;

/*
 * @Author 谭俊
 * @Description //模块
 * @Date 10:45 2019/10/27 0027
 * @Param
 * @return
 **/
@Controller
@RequestMapping("Module")
public class ModuleContorller {

   @Resource
   ModuleService moduleService;

    /**
     * layui中table表分页，默认是page=1，limit=10，与pagehaper参数对应，
     * layui中还需要数据的总个数count
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @RequestMapping("findAll")
    @ResponseBody
    public Map<String,Object> findAll(@RequestParam("page") Integer pageNum, @RequestParam("limit") Integer pageSize,String moduleName) throws Exception {


        int count = moduleService.count(moduleName);


        Map<String,Object> map = new HashMap<>();

        List<ModuleVo> list = moduleService.findAll(pageNum,pageSize,moduleName);


        map.put("data",list);

        map.put("count",count);

        map.put("code", 0);

        map.put("msg", "");//消息

        return map;


    }

    /*
     * 查询所有模板，下拉树
     */
    @RequestMapping("findByAll")
    @ResponseBody
    public List<AtsBaseItemTree> findByAll(){
        List<ModuleVo> list = moduleService.findA();
        ModuleVo moduleVo1 = new ModuleVo();
        moduleVo1.setModuleId("0");
        moduleVo1.setModuleName("顶级指标");
        moduleVo1.setModModuleId("0");
        list.add(moduleVo1);
        List<AtsBaseItemTree> listNode = new ArrayList<AtsBaseItemTree>();
        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
            ModuleVo moduleVo = (ModuleVo) iterator.next();
            AtsBaseItemTree atsBaseItemTree = new AtsBaseItemTree();
            atsBaseItemTree.setId(moduleVo.getModuleId());
            atsBaseItemTree.setValue(moduleVo.getModModuleId());
            atsBaseItemTree.setTitle(moduleVo.getModuleName());
            atsBaseItemTree.setField(moduleVo.getModuleName());
            atsBaseItemTree.setLabel(moduleVo.getModuleName());
            listNode.add(atsBaseItemTree);
        }
        //新建一个集合对象，将上一个集合加入到本集合中
        List<AtsBaseItemTree> nodeList2 = createTree(listNode);
        return nodeList2;

    }
    /**
     * 下拉树
     * @param nodes
     * @return
     */
    public List<AtsBaseItemTree> createTree(List<AtsBaseItemTree> nodes) {
        if (nodes == null || nodes.size() < 0){
            return null;
        }
        List<AtsBaseItemTree> nodeList = new ArrayList<>();// 根节点自定义，但是要和pid对应好
        // 将所有节点添加到多叉树中
        for (AtsBaseItemTree node : nodes) {
            if (node.getValue().equals("0")) {// 根节点自定义，但是要和pid对应好
                // 向根添加一个节点
                nodeList.add(node);
            } else {
                for (AtsBaseItemTree item : nodes) {
                    if (item.getId().equals(node.getValue())) {
                        item.getChildren().add(node);
                        item.setData(item.getChildren());
                        break ;
                    }
                }
            }
        }
        return nodeList;
    }


    /**
     * 增加数据
     * @param moduleVo
     * @return
     */
    @RequestMapping("insert")
    @ResponseBody
    public State insert(ModuleVo moduleVo) {
        if(moduleVo.getModuleId()!=null && !moduleVo.getModuleId().equals("")) {

            moduleService.update(moduleVo);
        }else {
            moduleService.add(moduleVo);
        }
        State state = new State();

        state.setState(1);

        state.setMsg("操作成功");

        return state;

    }

    /**
     * 修改数据
     * @param vo
     * @return
     */
    @RequestMapping("update")
    @ResponseBody
    public State update(ModuleVo vo) {
        moduleService.update(vo);
        State state = new State();
        state.setState(1);
        state.setMsg("修改成功");
        return state;
    }

    /**
     * 删除数据
     * @param vo
     * @return
     */
    @RequestMapping("delete")
    @ResponseBody
    public State delete(ModuleVo vo) {

        moduleService.delete(vo.getModuleId());
        State state = new State();
        state.setState(1);
        state.setMsg("删除成功");
        return state;
    }


    /**
     * 根据id查询数据
     * @param moduleId
     * @return
     */
    @RequestMapping("findId")
    @ResponseBody
    public ModuleVo findById(String moduleId) {

        return moduleService.findById(moduleId);
    }







}
